<script setup lang="ts">
import { onLaunch, onShow, onLoad } from '@dcloudio/uni-app'
import { addVisitor } from '@/api/app'
import { useAppStore } from './stores/app'
import { useUserStore } from './stores/user'
import { useThemeStore } from './stores/theme'
import { strToParams } from './utils/util'
import { SHARE_CODE } from './enums/cacheEnums'
import cache from './utils/cache'
import { useRouter } from 'uniapp-router-next'

// 延迟初始化 store，避免在 Pinia 未完全初始化时调用
let appStore: ReturnType<typeof useAppStore> | null = null
let userStore: ReturnType<typeof useUserStore> | null = null
let themeStore: ReturnType<typeof useThemeStore> | null = null

// 初始化路由（路由不依赖 Pinia）
const router = useRouter()

// 在 onLaunch 中初始化 store，确保 Pinia 已完全初始化
const getConfig = async () => {
    if (!appStore) {
        appStore = useAppStore()
    }
    if (appStore) {
        await appStore.getConfig()
        // #ifdef H5
        // const { status, close, url } = appStore.getH5Config
        // if (status == 0) {
        //     if (close == 1) return (location.href = url)
        //     router.reLaunch('/pages/empty/empty')
        // }
        // #endif
    }
}

const getTheme = async () => {
    if (!themeStore) {
        themeStore = useThemeStore()
    }
    if (themeStore) {
        await themeStore.getTheme()
    }
}

const getUser = () => {
    if (!userStore) {
        userStore = useUserStore()
    }
    if (userStore) {
        userStore.getUser()
    }
}

const cacheInvite = (query: any = {}) => {
    const code = query[SHARE_CODE] || strToParams(decodeURIComponent(query['scene']))[SHARE_CODE]
    //console.log('appapp', code)
    if (code) {
        cache.set(SHARE_CODE, code)
    }
}

const bindDistribution = () => {
    if (!userStore) {
        userStore = useUserStore()
    }
    if (userStore) {
        userStore.bindDistribution()
    }
}

onLaunch(async (opinion) => {
    // 确保 store 已初始化
    if (!appStore) {
        appStore = useAppStore()
    }
    if (!userStore) {
        userStore = useUserStore()
    }
    if (!themeStore) {
        themeStore = useThemeStore()
    }
    
    await getConfig()
    await getTheme()
    getUser()
    addVisitor()

    // 确保 APP 平台 tabBar 显示并使用 pages.json 中的配置
    // #ifdef APP-PLUS
    // 延迟一下确保 tabBar 已初始化
    setTimeout(() => {
        // 先设置样式
        uni.setTabBarStyle({
            color: '#515151',
            selectedColor: '#42A985',
            borderStyle: 'black',
            backgroundColor: '#ffffff'
        })
        
        // 显示 tabBar
        uni.showTabBar()
        
        // 延迟设置图标，分两次设置，确保选中状态正确
        setTimeout(() => {
            // 先设置首页图标（选中图标）
            uni.setTabBarItem({
                index: 0,
                text: '首页',
                iconPath: '/static/images/tabs/home.png',
                selectedIconPath: '/static/images/tabs/home-active.png'
            })
        }, 150)
        
        setTimeout(() => {
            // 再设置我的图标
            uni.setTabBarItem({
                index: 1,
                text: '我的',
                iconPath: '/static/images/tabs/user.png',
                selectedIconPath: '/static/images/tabs/user-active.png'
            })
        }, 250)
    }, 300)
    // #endif

    // #ifdef MP-WEIXIN
    // @ts-ignore
    const updateManager = wx.getUpdateManager()
    updateManager.onUpdateReady(function () {
        // @ts-ignore
        wx.showModal({
            title: '更新提示',
            content: '新版本已经准备好，是否重启应用？',
            success(res: any) {
                if (res.confirm) {
                    // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
                    updateManager.applyUpdate()
                }
            }
        })
    })
    updateManager.onUpdateFailed(function () {
        uni.$u.toast('新版本下载失败，请检查网络！')
    })
    // #endif
})
onShow((opinion) => {
    console.log('获取opinion', opinion)
    // 确保 store 已初始化
    if (!userStore) {
        userStore = useUserStore()
    }
    if (!appStore) {
        appStore = useAppStore()
    }
    
    cacheInvite(opinion?.query)
    bindDistribution()
    // 确保 APP 平台 tabBar 显示并使用正确的配置
    // #ifdef APP-PLUS
    // 先设置样式
    uni.setTabBarStyle({
        color: '#515151',
        selectedColor: '#42A985',
        borderStyle: 'black',
        backgroundColor: '#ffffff'
    })
    
    // 显示 tabBar
    uni.showTabBar()
    
    // 只在 onShow 中设置样式和显示 tabBar，不设置图标，避免影响选中状态
    // #endif
})
</script>
<style lang="scss">
page {
    min-height: 100%;
}
</style>
